using System;
using SIP.PN.FrontEnd.Code;
using SIP.PN.Servicios.Interfaces.DTO;

namespace SIP.PN.FrontEnd.controles
{
    public partial class CrudConcepto : ControlAbstracto
    {
        #region Propiedades

        private Acciones Accion
        {
            get { return (Acciones)ViewState["Accion"]; }
            set { ViewState["Accion"] = value; }
        }

        private string CodigoTipoDeProyecto
        {
            get { return (string)ViewState["CodigoTipoDeProyecto"]; }
            set { ViewState["CodigoTipoDeProyecto"] = value; }
        }
        
        #endregion

        #region Metodos Privados

        private void Guardar()
        {
            switch (Accion)
            {
                case Acciones.Nuevo:
                    SrvTipoDeProyecto.AgregarConcepto(CodigoTipoDeProyecto, txt_codigo.Text, ddl_tipo.SelectedValue, txt_nombre.Text, txt_descripcion.Text);
                    break;
                case Acciones.Editar:
                    SrvTipoDeProyecto.ModificarConcepto(CodigoTipoDeProyecto, txt_codigo.Text, txt_nombre.Text, txt_descripcion.Text);
                    break;
            }
            Ocultar();
        }

        #endregion

        #region Metodos Publicos

        public void Inicializar(Acciones accion, string codigoTipoDeProyecto)
        {
            Inicializar(accion, codigoTipoDeProyecto, string.Empty);
        }

        public void Inicializar(Acciones accion, string codigoTipoDeProyecto, string codigoConcepto)
        {
            Accion = accion;
            CodigoTipoDeProyecto = codigoTipoDeProyecto;
            ConceptoDTO entidad = null;
            switch (Accion)
            {
                case Acciones.Nuevo:
                    lbl_titulo.Text = "Agregar Concepto";
                    break;
                case Acciones.Visualizar:
                    lbl_titulo.Text = "Visualizar Concepto";
                    entidad = SrvTipoDeProyecto.ObtenerConcepto(codigoConcepto);
                    break;
                case Acciones.Editar:
                    lbl_titulo.Text = "Editar Concepto";
                    entidad = SrvTipoDeProyecto.ObtenerConcepto(codigoConcepto);
                    break;
            }
            ResetearFormulario();
            Seguridad();
            CargarFormulario(entidad);
        }

        public override void Seguridad()
        {
            btn_Aceptar.Visible = true;
            btn_Cancelar.Visible = true;
            txt_codigo.Enabled = false;
            txt_nombre.Enabled = false;
            txt_descripcion.Enabled = false;
            ddl_tipo.Enabled = false;
            switch (Accion)
            {
                case Acciones.Visualizar:
                    btn_Aceptar.Visible = false;
                    break;
                case Acciones.Nuevo:
                    txt_codigo.Enabled = true;
                    txt_nombre.Enabled = true;
                    txt_descripcion.Enabled = true;
                    ddl_tipo.Enabled = true;
                    break;
                case Acciones.Editar:
                    txt_nombre.Enabled = true;
                    txt_descripcion.Enabled = true;
                    break;
            }
            cva_codigo.Enabled = txt_codigo.Enabled;
        }

        public void ResetearFormulario()
        {
            txt_codigo.Enabled = true;
            txt_nombre.Enabled = true;
            txt_descripcion.Enabled = true;
            txt_codigo.Text = string.Empty;
            txt_nombre.Text = string.Empty;
            txt_descripcion.Text = string.Empty;
            ddl_tipo.Items.Clear();
        }

        public void CargarFormulario(ConceptoDTO entidad)
        {
            Utilidades.BindearComboBox(ddl_tipo, SrvTipoDeProyecto.ListarTipoConcepto(), "Nombre", "Codigo", false);
            if (entidad != null)
            {
                txt_codigo.Text = entidad.Codigo;
                txt_nombre.Text = entidad.Nombre;
                txt_descripcion.Text = entidad.Descripcion;
                ddl_tipo.SelectedValue = entidad.Tipo;
            }

            up_CrudConcepto.Update();
        }

        public void Mostrar()
        {
            mpe_CrudConcepto.Show();
        }

        public void Ocultar()
        {
            mpe_CrudConcepto.Hide();
        }

        #endregion

        #region Eventos

        private event EventHandler<EventArgs> aceptar;
        public event EventHandler<EventArgs> Aceptar
        {
            add { aceptar += value; }
            remove { aceptar -= value; }
        }

        private event EventHandler<EventArgs> cancelar;
        public event EventHandler<EventArgs> Cancelar
        {
            add { cancelar += value; }
            remove { cancelar -= value; }
        }

        protected void btn_Cancelar_Click(object sender, EventArgs e)
        {
            Ocultar();
            if (cancelar!=null)
                cancelar(this, new EventArgs());
        }

        protected void btn_Aceptar_Click(object sender, EventArgs e)
        {
            Guardar();
            if (aceptar != null)
                aceptar(this, new EventArgs());
        }

        #endregion
    }
}